﻿// System libraries
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

// Created libraries
using FrbaBus.Core;

namespace FrbaBus.Abm_Rol
{
    public partial class Rol : Form
    {
        public Rol()
        {
            InitializeComponent();
        }
        public class Foo
        {
            public static int validacion = 0;
            public static string nombrevalidacion;
        }
//*********Creacion de un Rol*********//
        private void creacion_Click(object sender, EventArgs e)
        {
            Validar.Visible = true;
            label6.Visible = false;
            comboBox2.Visible = false;
            habilitar.Visible = false;
            checkedListBox1.Enabled = true;
            DarBaja.Visible = false;
            Guardar.Visible = false;
            Cancelar.Visible = false;
            CargarFunc.Visible = false;
            comboBox1.Visible = false;
            label4.Visible = false;
            NombreRol.Visible = true;
            label2.Visible = true;
            label5.Visible = true;
            checkedListBox1.Visible = true;
            CrearRol.Visible  = true;
            selecciona.Visible = true;
            Deseleccionar.Visible = true;
            Limpia.Visible = true;
            checkedListBox1.Items.Clear();
            DBManager db = new DBManager();
            SqlCommand consulta = new SqlCommand("SELECT nombre from ALL_IN.Funcionalidad");
            SQLResponse r = db.executeQuery(consulta);
            SqlCommand consulta2 = new SqlCommand("select COUNT (*) from ALL_IN.Funcionalidad");
            SQLResponse r2 = db.executeQuery(consulta2);
            int valor = (int)r2.result.Rows[0][0];
            for (int i = 0; i < valor; i++)
            {
                checkedListBox1.Items.Add(r.result.Rows[i][0].ToString());
            }

            db.desconectar();

          }


        private void CrearRol_Click(object sender, EventArgs e)
        {
            if (NombreRol.Text == "")
            {
                MessageBox.Show("Debe colocar un nombre para el Rol");
                return;
            }
            else if (Foo.validacion == 0)
            {
                MessageBox.Show("Debe validar el nombre del rol ingresado!");
                return;
            }
            else if (NombreRol.Text != Foo.nombrevalidacion)
            {
                MessageBox.Show("El nombre ingresado es distinto al que validó. Vuelva a validar el nombre.");
            }
            else
            {
                if (checkedListBox1.CheckedItems.Count >= 1)
                {
                    DBManager db = new DBManager();
                    string rol = NombreRol.Text;
                    SqlCommand consulta = new SqlCommand("INSERT into ALL_IN.Rol Values('" + rol + "',1)");
                    db.executeQuery(consulta);
                    for (int x = 0; x < checkedListBox1.CheckedItems.Count; x++)
                    {
                        string func = checkedListBox1.CheckedItems[x].ToString();
                        SqlCommand consulta2 = new SqlCommand("Select ID_Funcionalidad from ALL_IN.Funcionalidad where nombre='" + func + "'");
                        SQLResponse r = db.executeQuery(consulta2);
                        SqlCommand consulta3 = new SqlCommand("INSERT into ALL_IN.RolxFuncionalidad values('" + rol + "'," + r.result.Rows[0][0] + ")");
                        db.executeQuery(consulta3);
                    }
                    db.desconectar();
                    MessageBox.Show("Se creo el rol " + NombreRol.Text + " exitosamente!");
                    NombreRol.Text = "";
                    foreach (int i in checkedListBox1.CheckedIndices)
                    {
                        checkedListBox1.SetItemCheckState(i, CheckState.Unchecked);
                    }
                }
                else
                {
                    MessageBox.Show("Debe seleccionar al menos una funcionalidad");
                }
            }

        }

        private void limpiar_Click(object sender, EventArgs e)
        {
            NombreRol.Text = "";
            foreach (int i in checkedListBox1.CheckedIndices)
            {
                checkedListBox1.SetItemCheckState(i, CheckState.Unchecked);
            }
        }

        private void seleccionar(object sender, EventArgs e)
        {
            for (int x = 0; x < checkedListBox1.Items.Count; x++)
            {
                checkedListBox1.SetItemChecked(x, true);
            }
        }

        private void deselecciona(object sender, EventArgs e)
        {
            for (int x = 0; x < checkedListBox1.Items.Count; x++)
            {
                checkedListBox1.SetItemChecked(x, false);
            }
        }


//**********Modificacion de un Rol*********//
        private void Modificacion_Click(object sender, EventArgs e)
        {
            Validar.Visible = false;
            label6.Visible = false;
            comboBox2.Visible = false;
            habilitar.Visible = false;
            DarBaja.Visible = false;
            checkedListBox1.Enabled = true;
            NombreRol.Visible = false;
            label2.Visible = false;
            label5.Visible = false;
            checkedListBox1.Visible = true;
            checkedListBox1.Items.Clear();
            CrearRol.Visible = false;
            selecciona.Visible = true;
            Deseleccionar.Visible = true;
            Limpia.Visible = false;
            selecciona.Visible = true;
            Deseleccionar.Visible = true;
            CargarFunc.Visible = true;
            Guardar.Visible = true;
            Cancelar.Visible = true;
            label5.Visible = true;
            label4.Visible = true;
            comboBox1.Visible = true;
            checkedListBox1.Visible = true;
            comboBox1.SelectedIndex = -1;
            comboBox1.Items.Clear();

            DBManager db = new DBManager();
            SqlCommand consulta = new SqlCommand("SELECT nombre from ALL_IN.Rol where habilitado=1");
            SQLResponse r = db.executeQuery(consulta);
            SqlCommand consulta2 = new SqlCommand("select COUNT (*) from ALL_IN.Rol where habilitado=1");
            SQLResponse r2 = db.executeQuery(consulta2);
            int valor = (int)r2.result.Rows[0][0];
            for (int i = 0; i < valor; i++)
            {
                comboBox1.Items.Add(r.result.Rows[i][0].ToString());
            }
        }


//*********Cargamos los datos del Rol seleccionado*********//
        private void CargarFunc_click(object sender, EventArgs e)
        {
            checkedListBox1.Items.Clear();
            if (string.IsNullOrEmpty(comboBox1.Text))
            {
                MessageBox.Show("Debe seleccionar un Rol");
            }
            else
            {
                DBManager db = new DBManager();
                SqlCommand consulta = new SqlCommand("SELECT nombre from ALL_IN.Funcionalidad");
                SQLResponse r = db.executeQuery(consulta);
                SqlCommand consulta2 = new SqlCommand("select COUNT (*) from ALL_IN.Funcionalidad");
                SQLResponse r2 = db.executeQuery(consulta2);
                int valor = (int)r2.result.Rows[0][0];
                for (int i = 0; i < valor; i++)
                {
                    checkedListBox1.Items.Add(r.result.Rows[i][0].ToString());
                    SqlCommand consulta3 = new SqlCommand("select ALL_IN.TieneFunc('" + comboBox1.Text + "','" + r.result.Rows[i][0] + "')");
                    SQLResponse r3 = db.executeQuery(consulta3);
                    if (r3.result.Rows[0][0].ToString() == "True")
                    {
                        checkedListBox1.SetItemChecked(checkedListBox1.Items.IndexOf(r.result.Rows[i][0]), true);
                    }
                }

                db.desconectar();

            }
           
        }

        private void Guardar_Click(object sender, EventArgs e)
        {


            if (string.IsNullOrEmpty(comboBox1.Text))
            {
                MessageBox.Show("Por favor, seleccione un rol y haga click en Cargar Funcionalidades");
            }
            else if (checkedListBox1.Items.Count == 0)
            {
                MessageBox.Show("Cargue las funcionalidades haciendo click en Cargar Funcionalidades");
            }
            else
            {
                DBManager db = new DBManager();
                int cont = 0;
                
                for (int i = 0; i < checkedListBox1.Items.Count; i++)
                {
                    int esta = 0;
                    string rol = comboBox1.Text;
                    string itemx = checkedListBox1.Items[i].ToString();
                    int indice = checkedListBox1.Items.IndexOf(checkedListBox1.Items[i]);
                    SqlCommand consulta = new SqlCommand("select ALL_IN.TieneFunc('" + rol + "','" + itemx + "')");
                    SQLResponse r = db.executeQuery(consulta);
                    if (r.result.Rows[0][0].ToString() == "False")
                    {
                        foreach (int h in checkedListBox1.CheckedIndices)
                        {
                            if (checkedListBox1.Items[h].ToString() == itemx)
                            {
                                cont = 1;
                                DBManager db2 = new DBManager();
                                SqlCommand insertarfuncionalidad = new SqlCommand("INSERT INTO ALL_IN.RolxFuncionalidad Values('" + comboBox1.Text + "','" + (indice + 1).ToString() + "')");
                                db2.executeQuery(insertarfuncionalidad);
                                db2.desconectar();
                            }
                        }
                    }
                    else
                    {
                        
                        foreach (int h in checkedListBox1.CheckedIndices)
                        {
                            if (checkedListBox1.Items[h].ToString() == itemx)
                            {
                                esta = 1;
                            }
                        }
                        if (esta == 0)
                        {
                            cont = 1;
                            DBManager db2 = new DBManager();
                            SqlCommand deletefuncionalidad = new SqlCommand("DELETE FROM ALL_IN.RolxFuncionalidad where nombre='" + comboBox1.Text + "' and ID_Funcionalidad='" + (indice + 1).ToString() + "'");
                            db2.executeQuery(deletefuncionalidad);
                            db2.desconectar();
                        }
                    }
                }
                if (cont == 1) 
                {
                        MessageBox.Show("Se cargaron las modificaciones");
                }
                else
                {
                    MessageBox.Show("No hubo cambios para guardar. Si lo desea, seleccione nuevas funcionalidades para el rol " + comboBox1.Text);
                }

            }

        }

        private void Cancelar_click(object sender, EventArgs e)
        {
            comboBox1.SelectedIndex = -1;
            checkedListBox1.Items.Clear();
        }

        private void ListarRol_Click(object sender, EventArgs e)
        {
            Validar.Visible = false;
            label6.Visible = false;
            comboBox2.Visible = false;
            habilitar.Visible = false;
            Limpia.Visible = false;
            DarBaja.Visible = false;
            checkedListBox1.Enabled = false;
            CrearRol.Visible = false;
            selecciona.Visible = false;
            Deseleccionar.Visible = false;
            Guardar.Visible = false;
            Cancelar.Visible = false;
            NombreRol.Visible = false;
            label2.Visible = false;
            label4.Visible = true;
            label5.Visible = true;
            CargarFunc.Visible = true;
            comboBox1.Visible = true;
            checkedListBox1.Visible = true;
            checkedListBox1.Items.Clear();
            comboBox1.SelectedIndex = -1;
            comboBox1.Items.Clear();

            DBManager db = new DBManager();
            SqlCommand consulta = new SqlCommand("SELECT nombre from ALL_IN.Rol where habilitado=1");
            SQLResponse r = db.executeQuery(consulta);
            SqlCommand consulta2 = new SqlCommand("select COUNT (*) from ALL_IN.Rol where habilitado=1");
            SQLResponse r2 = db.executeQuery(consulta2);
            int valor = (int)r2.result.Rows[0][0];
            for (int i = 0; i < valor; i++)
            {
                comboBox1.Items.Add(r.result.Rows[i][0].ToString());
            }
            db.desconectar();
        }

        private void Rol_Load(object sender, EventArgs e)
        {

        }

        private void Baja_Click(object sender, EventArgs e)
        {
            Validar.Visible = false;
            label6.Visible = true;
            comboBox2.Visible = true;
            habilitar.Visible = true;
            CrearRol.Visible = false;
            selecciona.Visible = false;
            Deseleccionar.Visible = false;
            Guardar.Visible = false;
            Cancelar.Visible = false;
            NombreRol.Visible = false;
            label2.Visible = false;
            label4.Visible = true;
            label5.Visible = false;
            CargarFunc.Visible = false;
            comboBox1.Visible = true;
            checkedListBox1.Visible = false;
            DarBaja.Visible = true;
            Limpia.Visible = false;
            comboBox1.SelectedIndex = -1;
            comboBox1.Items.Clear();
            comboBox2.SelectedIndex = -1;
            comboBox2.Items.Clear();
            DBManager db = new DBManager();
            SqlCommand consulta = new SqlCommand("SELECT nombre from ALL_IN.Rol where habilitado=1");
            SqlCommand consulta3 = new SqlCommand("SELECT nombre from ALL_IN.Rol where habilitado=0");
            SQLResponse r = db.executeQuery(consulta);
            SQLResponse r3 = db.executeQuery(consulta3);
            SqlCommand consulta2 = new SqlCommand("select COUNT (*) from ALL_IN.Rol where habilitado=1");
            SqlCommand consulta4 = new SqlCommand("select COUNT (*) from ALL_IN.Rol where habilitado=0");
            SQLResponse r2 = db.executeQuery(consulta2);
            SQLResponse r4 = db.executeQuery(consulta4);
            int valor = (int)r2.result.Rows[0][0];
            for (int i = 0; i < valor; i++)
            {
                comboBox1.Items.Add(r.result.Rows[i][0].ToString());
            }
            int valor2 = (int)r4.result.Rows[0][0];
            for (int i = 0; i < valor2; i++)
            {
                comboBox2.Items.Add(r3.result.Rows[i][0].ToString());
            }

            db.desconectar();
        }

        private void DarBaja_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(comboBox1.Text))
            {
                MessageBox.Show("Debe seleccionar un rol");
            }
            else
            {
                DialogResult dialogResult = MessageBox.Show("¿Desea dar de baja al rol " + comboBox1.Text + " ?", "Baja de Rol", MessageBoxButtons.YesNo);
                if (dialogResult == DialogResult.Yes)
                {
                    DBManager db = new DBManager();
                    SqlCommand consulta = new SqlCommand("DELETE FROM ALL_IN.RolxFuncionalidad where nombre='" + comboBox1.Text + "'");
                    SqlCommand consulta2 = new SqlCommand("update ALL_IN.Rol set habilitado=0 where nombre='" + comboBox1.Text + "'");
                    db.executeQuery(consulta);
                    db.executeQuery(consulta2);
                    db.desconectar();
                    MessageBox.Show("Se dio de baja el rol " + comboBox1.Text);
                    comboBox1.Text = "";
                    comboBox1.Items.Clear();
                    comboBox2.Text = "";
                    comboBox2.Items.Clear();
                    DBManager db2 = new DBManager();
                    SqlCommand consulta4 = new SqlCommand("SELECT nombre from ALL_IN.Rol where habilitado=1");
                    SQLResponse r = db2.executeQuery(consulta4);
                    SqlCommand consulta5 = new SqlCommand("select COUNT (*) from ALL_IN.Rol where habilitado=1");
                    SQLResponse r2 = db2.executeQuery(consulta5);
                    int valor = (int)r2.result.Rows[0][0];
                    for (int i = 0; i < valor; i++)
                    {
                        comboBox1.Items.Add(r.result.Rows[i][0].ToString());
                    }
                    DBManager db3 = new DBManager();
                    SqlCommand consulta7 = new SqlCommand("SELECT nombre from ALL_IN.Rol where habilitado=0");
                    SQLResponse r3 = db3.executeQuery(consulta7);
                    SqlCommand consulta8 = new SqlCommand("select COUNT (*) from ALL_IN.Rol where habilitado=0");
                    SQLResponse r4 = db3.executeQuery(consulta8);
                    int valor2 = (int)r4.result.Rows[0][0];
                    for (int i = 0; i < valor2; i++)
                    {
                        comboBox2.Items.Add(r3.result.Rows[i][0].ToString());
                    }


                    db.desconectar();
                }
                else if (dialogResult == DialogResult.No)
                {
                    comboBox1.Text = "";
                }
            }
        }

        private void habilitar_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(comboBox2.Text))
            {
                MessageBox.Show("Debe seleccionar un rol");
            }
            else
            {
                DialogResult dialogResult = MessageBox.Show("¿Desea habilitar el rol " + comboBox2.Text + " ?", "Habilitacion de Rol", MessageBoxButtons.YesNo);
                if (dialogResult == DialogResult.Yes)
                {

                    DBManager db = new DBManager();
                    SqlCommand consulta = new SqlCommand("update ALL_IN.Rol set habilitado=1 where nombre='" + comboBox2.Text + "'");
                    db.executeQuery(consulta);
                    MessageBox.Show("Se habilitó el rol " + comboBox2.Text);
                    comboBox2.Text = "";
                    comboBox2.Items.Clear();
                    comboBox1.Text = "";
                    comboBox1.Items.Clear();
                    DBManager db2 = new DBManager();
                    SqlCommand consulta4 = new SqlCommand("SELECT nombre from ALL_IN.Rol where habilitado=0");
                    SQLResponse r = db2.executeQuery(consulta4);
                    SqlCommand consulta5 = new SqlCommand("select COUNT (*) from ALL_IN.Rol where habilitado=0");
                    SQLResponse r2 = db2.executeQuery(consulta5);
                    int valor = (int)r2.result.Rows[0][0];
                    for (int i = 0; i < valor; i++)
                    {
                        comboBox2.Items.Add(r.result.Rows[i][0].ToString());
                    }
                    DBManager db3 = new DBManager();
                    SqlCommand consulta6 = new SqlCommand("SELECT nombre from ALL_IN.Rol where habilitado=1");
                    SQLResponse r3 = db3.executeQuery(consulta6);
                    SqlCommand consulta7 = new SqlCommand("select COUNT (*) from ALL_IN.Rol where habilitado=1");
                    SQLResponse r4 = db3.executeQuery(consulta7);
                    int valor2 = (int)r4.result.Rows[0][0];
                    for (int i = 0; i < valor2; i++)
                    {
                        comboBox1.Items.Add(r3.result.Rows[i][0].ToString());
                    }


                    db.desconectar();
                }
                else if (dialogResult == DialogResult.No)
                {
                    comboBox2.Text = "";
                }

            }
        }

        private void Validar_Click(object sender, EventArgs e)
        {
            DBManager db = new DBManager();
            SqlCommand consulta = new SqlCommand("select ALL_IN.existeRol('" + NombreRol.Text + "')");
            SQLResponse r = db.executeQuery(consulta);
            if (r.result.Rows[0][0].ToString() == "True")
            {
                MessageBox.Show("Este nombre ya esta en uso!. Por favor eliga otro nombre.");
                NombreRol.Text = "";
                Foo.validacion = 0;
            }
            else
            {
                MessageBox.Show("Esta habilitado para usar este nombre para el nuevo rol.");
                Foo.validacion = 1;
                Foo.nombrevalidacion = NombreRol.Text;
            }


        }
         private void NombreRol_TextChanged(object sender, EventArgs e)
         {

         }

         private void NombreRolKey(object sender, KeyPressEventArgs e)
         {
             int i = e.KeyChar;
             if ((i >= 65 && i <= 90) || (i >= 97 && i <= 122) || i == 8 || i == 13)
             {
             }
             else
             {
                 MessageBox.Show("Solo estan permitidas letras.");
                 e.Handled = true;
             }
         }

    }
}
